\section{Tópicos Adicionais}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{JPA}
\begin{frame}[fragile]
  \frametitle{Chave composta}
  \begin{itemize}
    \item Define-se a chave composta com uma classe auxiliar:
  \begin{verbatim}
@Embeddable
public class PKEndereco implements Serializable {
    private Integer idPessoa;
    private String tipo;
    ...
}

@Entity
public class Endereco {
    @EmbeddedId
    private PKEndereco pk;
    ...
}
  \end{verbatim}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Chave estrangeira: Relacionamento Muitos-Para-Um}
  \begin{itemize}
    \item Um atributo de uma classe pode ser uma outra entidade: Gera-se uma
    chave estrangeira no banco
  \begin{verbatim}
@Entity
public class Endereco {
    ...
    @ManyToOne
    private Pessoa pessoa;
    ...
}
  \end{verbatim}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Chave estrangeira: Relacionamento Um-Para-Muitos}
  \begin{itemize}
    \item Um atributo pode ser uma lista, com todos os registros que
    referenciam aquele objeto:
  \begin{verbatim}
@Entity
public class Pessoa {
    ...
    @OneToMany
    private List<Endereco> enderecos;
    ...
}
  \end{verbatim}
    \item ESSA FUNCIONALIDADE APRESENTA SÉRIOS PROBLEMAS DE ESCALABILIDADE
  \end{itemize}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Outras Ferramentas}
\begin{frame}
  \frametitle{Display Tag}
  \begin{itemize}
    \item Disponível em http://displaytag.sourceforge.net/
    \item Útil quando se usa a API de servlets/Struts
    \item Monta tabelas com:
    \begin{itemize}
      \item Ordenação de colunas
      \item Paginação
      \item Exportação para Excel
    \end{itemize}
    \item Sintaxe é semelhante ao data table do JSF
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Apache Ant e Apache Maven}
  \begin{itemize}
    \item Ant: Disponível em http://ant.apache.org/
    \item Maven: Disponível em http://maven.apache.org/
    \item Ferramentas de $build$ (e.g. Make)
    \item Eclipse já vem com suporte ao Ant
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{JasperReports e iReport}
  \begin{itemize}
    \item Framework e ferramenta de relatórios
    \item Disponível em http://www.jaspersoft.com/
    \item Gera HTML, PDF, Excel
    \item JasperReports: Aceita dados de diversas origens
    \item iReport: Ferramenta visual que gera relatórios para o JasperReports
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Apache Tiles}
  \begin{itemize}
    \item Framework para layout de páginas
    \item Disponível em http://tiles.apache.org/
    \item Define-se um layout base e utiliza-se herança para definição das
    páginas do sistema
    \item Permite que o conceito de reuso seja aplicado nas páginas Web da
    melhor maneira possível
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Internacionalização (i18n)}
  \begin{itemize}
    \item Todos os frameworks tem algum mecanismo de internacionalização:
    \begin{itemize}
      \item Definem-se $bundles$ (i.e. ``constantes'' que são referenciadas nas
      páginas)
      \item Fornecem-se arquivos de bundles para cada idioma:
      \begin{itemize}
        \item application en.properties: app.label.person=Person
        \item application pt.properties: app.label.person=Pessoa
      \end{itemize}
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Enterprise Java Beans}
  \begin{itemize}
    \item EJB é uma especificação composta por três componentes:
    \begin{itemize}
      \item JPA: Persistência
      \item Session Beans: Camada de serviços síncronos
      \item Message-Driven Beans: Serviços assíncronos
    \end{itemize}
    \item Provê de forma transparente controle de transações, segurança, acesso
    concorrênte, serviços assíncronos, alta disponibilidade
    \item Uma alteranativa mais leve é o framework Spring
    (http://www.springsource.org/)
  \end{itemize}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Certificações}
\begin{frame}
  \frametitle{Certificações Básicas}
  \begin{itemize}
    \item SCJA: Sun Certified Java Associate
    \begin{itemize}
      \item Cobre conceitos básicos de programação OO e Java
    \end{itemize}
    \item SCJP: Sun Certified Java Programmer
    \begin{itemize}
      \item Cobre sólidos conhecimentos da linguagem Java
      \item É requerida para TODAS as certificações de nível intermediário
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Certificações Intermediárias}
  \begin{itemize}
    \item SCJD: Sun Certified Java Developer
    \begin{itemize}
      \item Prova com conceitos de programação desktop: RMI, Swing, etc.
      \item É necessária submissão de projeto para aprovação
    \end{itemize}
    \item SCMAD: Sun Certified Mobile Application Developer
    \begin{itemize}
      \item Prova sobre desenvolvimento Java para celulares
      \item Cobre JTWI, CLDC (base), MIDP (gráficos, jogos, etc.), MMAPI
      (multimídia) e WMA (SMS e MMS)
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Certificações Intermediárias: Java EE}
  \begin{itemize}
    \item SCWCD: Sun Certified Web Component Developer
    \begin{itemize}
      \item Prova sobre programação Web
      \item Cobre Servlets, JSP's, taglibs, filtros, design patterns, etc.
      \item Não cobre JSF
    \end{itemize}
    \item SCBCD: Sun Certified Business Component Developer
    \begin{itemize}
      \item Especificação EJB
    \end{itemize}
    \item SCDJWS: Sun Certified Developer for Java Web Services
    \begin{itemize}
      \item Desenvolvimento de Web Services e XML
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Certificações Avançadas}
  \begin{itemize}
    \item SCEA: Sun Certified Enterprise Architect
    \begin{itemize}
      \item Prova sobre conceitos de arquitetura (UML, projeto OO, design
      patterns, JSF, Applets, segurança, redes, SOA, etc)
      \item Envio de um projeto de software baseado em um documento de
      requisitos funcionais e não funcionais
      \item Prova dissertativa para justificar as escolhas de projeto
    \end{itemize}
  \end{itemize}
\end{frame}
